package com.sugon.modules.device.service;

import com.sugon.entity.DevMaintenanceTicketItemEntity;
import com.sugon.modules.device.model.vo.SaveDevAmRuleParam;
import com.sugon.modules.device.model.vo.DevMaintenancePlanItemDateAdjustParamVO;
import com.sugon.modules.device.model.vo.DevMaintenanceRuleParamVO;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

/**
 * @author ： YuXD
 * @description： 设备维护业务Manager
 * @date ： 2020-08-10 下午 12:04
 * @version: 1.0
 */
public interface IDeviceMaintenanceManager {

    /**
     * 生成设备维护计划模板数据
     * 包括表头和业务数据
     *
     * @param yearly     年度字符串
     * @param planIdlist 维护计划ID字符串列表，多个用逗号分隔
     * @return
     */
    Map<String, Object> generateDevMaintenancePlanPreviewTemplateData(String yearly, String planIdlist);

    /**
     * 生成设备维护计划实施跟踪模板数据
     * 包含每个维护项预计执行和实际执行时间
     * 预计执行用原点，实际执行用对号
     *
     * @param planIds 计划ID字符串，多个计划用英文逗号分隔
     * @return
     */
    Map<String, Object> generatePlanImplementFollowTemplateData(String planIds);

    /**
     * 新增设备维护规程
     *
     * @param devMaintenanceRuleParam 设备维护规程参数
     * @return
     */
    boolean addDeviceMaintenanceRule(DevMaintenanceRuleParamVO devMaintenanceRuleParam);

    /**
     * 创建自主设备维护规程
     *
     * @param rulesParam 设备自主维护规程参数
     * @return
     */
    boolean createDeviceAmMaintenanceRules(SaveDevAmRuleParam rulesParam);

    /**
     * 关联设备维护计划和维护规程
     *
     * @param planId  维护计划ID
     * @param ruleIds 维护规程ID列表
     * @return
     */
    boolean correlateMaintenancePlanAndRule(String planId, String[] ruleIds);

    /**
     * 调整设备维护计划明细，一般指的是日期
     *
     * @param rules
     * @return
     */
    boolean adjustDevMaintenancePlanItem(List<DevMaintenancePlanItemDateAdjustParamVO> rules);

    /**
     * 完成设备维护项
     * 1、修改维护工单维护项状态
     * 2、检测当前维护工单的所有维护项是否已完成
     * 如果都已完成，那么修改维护工单状态
     *
     * @param devMaintenanceTicketItemEntity
     * @return
     */
    boolean completeDevMaintenanceOption(DevMaintenanceTicketItemEntity devMaintenanceTicketItemEntity);

    /**
     * 修正设备维护工单项现场照片
     *
     * @param pmTicketItem   维护工单项
     * @param liveImageArray 最新的现场照片
     * @return
     */
    boolean modifyLiveImage(DevMaintenanceTicketItemEntity pmTicketItem, MultipartFile[] liveImageArray);

}
